package com.jy.vo;

import com.jy.enums.ResultEnum;
import com.jy.service.IResult;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Xiexingxie
 * @date 2022/11/22 上午 11:13
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    
    private Integer code;
    private String message;
    private T data;


    /**
     * 调用成功，并且返回数据
     * @param data
     * @param <T>
     * @return
     */
    public static <T> Result<T> success(T data){
        return new Result<>(ResultEnum.SUCCESS.getCode(),ResultEnum.SUCCESS.getMessage(),data);
    }

    /**
     * 调用成功，返回消息和数据
     * @param message
     * @param data
     * @param <T>
     * @return
     */
    public static <T> Result<T> success(String message,T data){
        return new Result<>(ResultEnum.SUCCESS.getCode(), message,data);
    }

    /**
     * 接口调用失败
     * @return
     */
    public static Result<?> failed(){
        return new Result<>(ResultEnum.COMMON_FAILED.getCode(),ResultEnum.COMMON_FAILED.getMessage(),null);
    }

    /**
     * 接口调用失败，返回自定义消息
     * @param message
     * @return
     */
    public static Result<?> failed(String message){
        return new Result<>(ResultEnum.COMMON_FAILED.getCode(),message,null);
    }

    /**
     * 失败，直接返回接口
     * @param errorResult
     * @return
     */
    public static Result<?> failed(IResult errorResult){
        return new Result<>(errorResult.getCode(),errorResult.getMessage(),null);
    }
    
    public static <T> Result<T> instance(Integer code,String message,T data){
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setMessage(message);
        result.setData(data);
        return result;
    }
    
    
}
